package us.proyecto.canarios.actions.concursos;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import org.ajax4jsf.exception.FileUploadException;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelectionIndex;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;
import org.richfaces.component.html.HtmlTree;
import org.richfaces.event.NodeSelectedEvent;
import org.richfaces.model.TreeNode;

import us.proyecto.canarios.actions.admin.AutenticacionAction;
import us.proyecto.canarios.actions.usuarios.ConsultaUsuarioAction;
import us.proyecto.canarios.dao.ConcursoDAO;
import us.proyecto.canarios.dao.DiccionarioDAO;
import us.proyecto.canarios.dao.PajarosDAO;
import us.proyecto.canarios.dao.UsuarioDAO;
import us.proyecto.canarios.domain.Asociacion;
import us.proyecto.canarios.domain.Concurso;
import us.proyecto.canarios.domain.Criador;
import us.proyecto.canarios.domain.Incidencia;
import us.proyecto.canarios.domain.Pajaro;
import us.proyecto.canarios.domain.Premio;
import us.proyecto.canarios.domain.Puntuacion;
import us.proyecto.canarios.domain.Tipo;
import us.proyecto.canarios.domain.Usuario;

@Name("gestionCanarioJuez")
@Scope(ScopeType.SESSION)
public class GestionCanarioJuezAction {

	@Logger
	Log log;

	private Pajaro pajaro;
	private Puntuacion puntuacion;
	private Concurso concurso;
	private String filtro;

	@In(create = true)
	private PajarosDAO pajarosDAO;
	
	@In(create = true)
	private DiccionarioDAO diccionariosDAO;

	private List<Puntuacion> listaPajaros;
	
	private InputStream fich;

	private String filename;
	
	private Boolean consulta = false;
	
	
	
	
	public void buscar(){
		if(filtro.equals("1")){
			listaPajaros = pajarosDAO.getListaPajarosXConcursoTodos(concurso);
		}else if(filtro.equals("2")) {
			listaPajaros = pajarosDAO.getListaPajarosXConcursoSinEvaluar(concurso);
		}else if(filtro.equals("3")) {
			listaPajaros = pajarosDAO.getListaPajarosXConcursoEvaluados(concurso);
		}
		for(Puntuacion p:listaPajaros){
			if(p.getPuntuacion()!=null && !p.getPuntuacion().equals("")) {
				p.setEvaluado("SI");
			}else{
				p.setEvaluado("NO");
			}
		}
		if(listaPajaros == null || listaPajaros.size()==0){
			FacesMessages.instance().add("No hay pájaros que coincidan con los criterios seleccionados");
		}
		
	}
	
	@Begin(join = true, flushMode=FlushModeType.MANUAL)
	public String gestion(Concurso con) {
		if(con.getIdConcurso()!=0){
			concurso = con;
			
			pajaro = new Pajaro();
			puntuacion = new Puntuacion();
			puntuacion.setPajaro(pajaro);
			pajaro.setPuntuaciones(new HashSet<Puntuacion>());
			pajaro.getPuntuaciones().add(puntuacion);
			filtro = "1";
			consulta = false;
			buscar();
			return "true";
		}
		return "false";

	}
	
	public String gestionPasados(Concurso con) {
		if(con.getIdConcurso()!=0){
			concurso = con;
			consulta = true;
			pajaro = new Pajaro();
			puntuacion = new Puntuacion();
			puntuacion.setPajaro(pajaro);
			pajaro.setPuntuaciones(new HashSet<Puntuacion>());
			pajaro.getPuntuaciones().add(puntuacion);
			filtro = "1";
			buscar();
			return "true";
		}
		return "false";

	}
	
	public String gestionProximos(Concurso con) {
		if(con.getIdConcurso()!=0){
			concurso = con;
			consulta = true;
			pajaro = new Pajaro();
			puntuacion = new Puntuacion();
			puntuacion.setPajaro(pajaro);
			pajaro.setPuntuaciones(new HashSet<Puntuacion>());
			pajaro.getPuntuaciones().add(puntuacion);
			filtro = "1";
			buscar();
			return "true";
		}
		return "false";

	}

	public String getFiltro() {
		return filtro;
	}

	public void setFiltro(String filtro) {
		this.filtro = filtro;
	}

	public Pajaro getPajaro() {
		return pajaro;
	}

	public void setPajaro(Pajaro pajaro) {
		this.pajaro = pajaro;
	}

	public List<Puntuacion> getListaPajaros() {
		return listaPajaros;
	}

	public void setListaPajaros(List<Puntuacion> listaPajaros) {
		this.listaPajaros = listaPajaros;
	}

	public Concurso getConcurso() {
		return concurso;
	}

	public void setConcurso(Concurso concurso) {
		this.concurso = concurso;
	}
	
	public void cargar() {
        try {
            if (fich != null) {
                String s1 = filename.substring(filename.length() - 3, filename.length());
                if (s1.equals("xls")) {
                        Workbook wb = Workbook.getWorkbook(fich);
                        Sheet sheet = wb.getSheet(0);
                        
                         tratarFicheroIndividual(sheet);
                        
                        
                        
                } else {
                    FacesMessages.instance().add("Debe introducir un fichero excel");
                }
            } else {
                FacesMessages.instance().add("Debe introducir un fichero");
            }
        } catch (BiffException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        } catch (FileUploadException e) {
            FacesMessages.instance().add("El tamaño del archivo es demasiado grande");
        }
    }


	private void tratarFicheroIndividual(Sheet sheet) {
		Cell celdaNumAnilla = sheet.getCell("B1");
		Cell celdaConcurso = sheet.getCell("E1");
		Cell celdaCriterio1 = sheet.getCell("B2");
		Cell celdaCriterio2 = sheet.getCell("B3");
		Cell celdaCriterio3 = sheet.getCell("B4");
		Cell celdaCriterio4 = sheet.getCell("B5");
		Cell celdaCriterio5 = sheet.getCell("B6");
		Cell celdaCriterio6 = sheet.getCell("B7");
		Cell celdaCriterio7 = sheet.getCell("B8");
		Cell celdaPuntuacion = sheet.getCell("B9");
		Cell celdaDescalificado = sheet.getCell("B10");
		Cell celdaPremio = sheet.getCell("B11");
		Cell celdaObservaciones = sheet.getCell("B11");
		Puntuacion p =pajarosDAO.getPuntuacionByNumAnillaConcurso(celdaNumAnilla.getContents(), celdaConcurso.getContents());
		p.setCriterio1(celdaCriterio1.getContents());
		p.setCriterio2(celdaCriterio2.getContents());
		p.setCriterio3(celdaCriterio3.getContents());
		p.setCriterio4(celdaCriterio4.getContents());
		p.setCriterio5(celdaCriterio5.getContents());
		p.setCriterio6(celdaCriterio6.getContents());
		p.setCriterio7(celdaCriterio7.getContents());
		if(celdaPremio != null && celdaPremio.getContents() != null && !celdaPremio.getContents().equals("")){
			String[] c = celdaPremio.getContents().split(",");
			Premio prm = diccionariosDAO.getPremioById(c[0]);
			p.setPremio(prm);
		}
		p.setPuntuacion(celdaPuntuacion.getContents());
		String descalificado = celdaDescalificado.getContents();
		if(descalificado != null && descalificado.equals("S")){
			p.setDescalificado(true);
		}else {
			p.setDescalificado(false);
		}
		p.setMotivo(celdaObservaciones.getContents());
		pajarosDAO.save(p.getPajaro());
	}

	public InputStream getFich() {
		return fich;
	}

	public void setFich(InputStream fich) {
		this.fich = fich;
	}

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public Boolean getConsulta() {
		return consulta;
	}

	public void setConsulta(Boolean consulta) {
		this.consulta = consulta;
	}
	
	
}
